﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using InterfazGrafico.LibreriaClases.Clases;
using InterfazGrafico.LibreriaConstantes;
using InterfazGrafico.LibreriaConstantes.Elementos;

namespace InterfazGrafico.LibreriaClases.Propiedades
{
    /// <summary>
    /// Almacena las propiedades de un elemento específico.
    /// </summary>
    public class PCrearEstadisticas : Propiedades
    {
        /// <summary>
        /// Valor por defecto de la propiedad SobrescribirSalida
        /// </summary>
        private const bool ValorDefectoSobrescribirSalida = false;

        /// <summary>
        /// Entrada de datos.
        /// </summary>
        public string Entrada
        {
            get
            {
                return this.getPropiedadString(CCrearEstadisticas.Entrada);
            }
            set
            {
                this.setOrAddPropiedad(CCrearEstadisticas.Entrada, value);
            }
        }

        /// <summary>
        /// Salida de datos.
        /// </summary>
        public string Salida
        {
            get
            {
                return this.getPropiedadString(CCrearEstadisticas.Salida);
            }
            set
            {
                this.setOrAddPropiedad(CCrearEstadisticas.Salida, value);
            }
        }

        /// <summary>
        /// Estructura de entrada.
        /// </summary>
        public string EstructuraEntrada
        {
            get
            {
                return this.getPropiedadString(CCrearEstadisticas.EstructuraEntrada);
            }
            set
            {
                this.setOrAddPropiedad(CCrearEstadisticas.EstructuraEntrada, value);
            }
        }

        /// <summary>
        /// Estructura de salida.
        /// </summary>
        public string EstructuraSalida
        {
            get
            {
                return this.getPropiedadString(CCrearEstadisticas.EstructuraSalida);
            }
            set
            {
                this.setOrAddPropiedad(CCrearEstadisticas.EstructuraSalida, value);
            }
        }

        /// <summary>
        /// Fichero de definición de estadísticas.
        /// </summary>
        public string FicheroEstadisticas
        {
            get
            {
                return this.getPropiedadString(CCrearEstadisticas.FicheroEstadisticas);
            }
            set
            {
                this.setOrAddPropiedad(CCrearEstadisticas.FicheroEstadisticas, value);
            }
        }

        /// <summary>
        /// Fichero de salida de estadísticas.
        /// </summary>
        public string SalidaEstadisticas
        {
            get
            {
                return this.getPropiedadString(CCrearEstadisticas.SalidaEstadisticas);
            }
            set
            {
                this.setOrAddPropiedad(CCrearEstadisticas.SalidaEstadisticas, value);
            }
        }

        /// <summary>
        /// Nombre del grupo de estadísticas.
        /// </summary>
        public string NombreEstadisticas
        {
            get
            {
                return this.getPropiedadString(CCrearEstadisticas.NombreEstadisticas);
            }
            set
            {
                this.setOrAddPropiedad(CCrearEstadisticas.NombreEstadisticas, value);
            }
        }

        /// <summary>
        /// Indicador sobrescritura fichero de salida.
        /// </summary>
        public bool SobrescribirEstadistica
        {
            get
            {
                bool? dato = this.getPropiedadBool(CCrearEstadisticas.SobrescribirEstadistica);
                if (dato == null)
                    return ValorDefectoSobrescribirSalida;
                return (bool)dato;
            }
            set
            {
                this.setOrAddPropiedad(CCrearEstadisticas.SobrescribirEstadistica, value);
            }
        }

        /// <summary>
        /// Constructor por defecto.
        /// </summary>
        public PCrearEstadisticas()
            : base()
        {
        }

        /// <summary>
        /// Obtiene los parámetros a partir del fichero XML indicado.
        /// </summary>
        /// <param name="fichero">Fichero de configuración XML</param>
        override public void leer(string fichero)
        {
            try
            {
                base.leer(fichero);
                XmlDocument xml = LeerXml.AbrirFicheroParametros(fichero);

                try
                { this.Entrada = LeerXml.ObtenerValorCampo(xml, CCrearEstadisticas.RutaEntrada); }
                catch (Exception)
                { this.Entrada = string.Empty; };

                try
                { this.Salida = LeerXml.ObtenerValorCampo(xml, CCrearEstadisticas.RutaSalida); }
                catch (Exception)
                { this.Salida = string.Empty; }

                try
                { this.EstructuraEntrada = LeerXml.ObtenerValorCampo(xml, CCrearEstadisticas.RutaEstructuraEntrada); }
                catch (Exception)
                { this.EstructuraEntrada = string.Empty; }

                try
                { this.EstructuraSalida = LeerXml.ObtenerValorCampo(xml, CCrearEstadisticas.RutaEstructuraSalida); }
                catch (Exception)
                { this.EstructuraSalida = string.Empty; }

                try
                { this.FicheroEstadisticas = LeerXml.ObtenerValorCampo(xml, CCrearEstadisticas.RutaFicheroEstadisticas); }
                catch (Exception)
                { this.FicheroEstadisticas = string.Empty; }

                try
                { this.SalidaEstadisticas = LeerXml.ObtenerValorCampo(xml, CCrearEstadisticas.RutaSalidaEstadisticas); }
                catch (Exception)
                { this.SalidaEstadisticas = string.Empty; }

                try
                { this.NombreEstadisticas = LeerXml.ObtenerValorCampo(xml, CCrearEstadisticas.RutaNombreEstadistica); }
                catch (Exception)
                { this.NombreEstadisticas = string.Empty; }

                try
                { this.SobrescribirEstadistica = bool.Parse(LeerXml.ObtenerValorCampo(xml, CCrearEstadisticas.RutaSobrescribirEstadistica)); }
                catch (Exception)
                { this.SobrescribirEstadistica = ValorDefectoSobrescribirSalida; }
            }
            catch (Exception ex)
            {
                throw new ApplicationException(Constantes.ERROR_LECTURA_FICHERO_CONFIGURACION, ex);
            }
        }

        /// <summary>
        /// Escribe los parámetros al fichero XML indicado.
        /// </summary>
        /// <param name="fichero">Fichero de configuración XML</param>
        public override void escribir(string fichero)
        {
            try
            {
                base.escribir(fichero);
                XmlWriter xml = EscribirXml.AbrirFicheroParametros(fichero);
                EscribirXml.InicioElemento(xml, CCrearEstadisticas.NodoRaiz);
                EscribirXml.EscribeNodo(xml, CCrearEstadisticas.NodoEntrada, Entrada);
                EscribirXml.EscribeNodo(xml, CCrearEstadisticas.NodoSalida, Salida);
                EscribirXml.EscribeNodo(xml, CCrearEstadisticas.NodoEstructuraEntrada, EstructuraEntrada);
                EscribirXml.EscribeNodo(xml, CCrearEstadisticas.NodoEstructuraSalida, EstructuraSalida);

                // Configuración
                EscribirXml.InicioElemento(xml, CCrearEstadisticas.NodoConfiguracion);
                EscribirXml.EscribeNodo(xml, CCrearEstadisticas.NodoFicheroEstadisticas, FicheroEstadisticas);
                EscribirXml.EscribeNodo(xml, CCrearEstadisticas.NodoSalidaEstadisticas, SalidaEstadisticas);
                EscribirXml.EscribeNodo(xml, CCrearEstadisticas.NodoNombreEstadisticas, NombreEstadisticas);
                EscribirXml.EscribeNodo(xml, CCrearEstadisticas.NodoSobrescribirEstadistica, SobrescribirEstadistica.ToString());
                EscribirXml.FinElemento(xml);
                EscribirXml.FinElemento(xml);
                EscribirXml.Flush(xml);
                EscribirXml.Close(xml);
            }
            catch (Exception ex)
            {
                throw new ApplicationException(Constantes.ERROR_ESCRITURA_FICHERO_CONFIGURACION, ex);
            }
        }
    }
}
 